#include "json_builder.h"
#include <stdio.h>
#include "esp_log.h"
#include "esp_system.h"

// 日志标签
static const char *TAG = "JSON_BUILDER";

// 初始化 JSON 数据包
cJSON *json_builder_init(const char *mac, int packet_number) {
    // 创建 JSON 根对象
    cJSON *root = cJSON_CreateObject();
    if (!root) {
        ESP_LOGE(TAG, "Failed to create JSON object");
        return NULL;
    }

    // 添加 MAC 地址
    cJSON_AddStringToObject(root, "mac", mac);

    // 添加包序号
    cJSON_AddNumberToObject(root, "pkn", packet_number);

    return root;
}

// 添加整数数组字段
esp_err_t json_builder_add_int_array(cJSON *json, const char *key, const int *values, int size) {
    if (!json || !key || !values) {
        return ESP_ERR_INVALID_ARG;
    }

    cJSON *array = cJSON_CreateIntArray(values, size);
    if (!array) {
        ESP_LOGE(TAG, "Failed to create JSON array");
        return ESP_ERR_NO_MEM;
    }

    cJSON_AddItemToObject(json, key, array);
    return ESP_OK;
}

// 添加字符串字段
esp_err_t json_builder_add_string(cJSON *json, const char *key, const char *value) {
    if (!json || !key || !value) {
        return ESP_ERR_INVALID_ARG;
    }

    cJSON_AddStringToObject(json, key, value);
    return ESP_OK;
}

// 添加整数字段
esp_err_t json_builder_add_int(cJSON *json, const char *key, int value) {
    if (!json || !key) {
        return ESP_ERR_INVALID_ARG;
    }

    cJSON_AddNumberToObject(json, key, value);
    return ESP_OK;
}

// 转换 JSON 数据为字符串
char *json_builder_to_string(cJSON *json) {
    if (!json) {
        return NULL;
    }

    return cJSON_PrintUnformatted(json);
}

// 清理 JSON 数据包
void json_builder_cleanup(cJSON *json) {
    if (json) {
        cJSON_Delete(json);
    }
}
